package com.example.mobilesafe.activity;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;

import com.example.mobilesafe.R;
import com.example.mobilesafe.constant.ConstantValue;
import com.example.mobilesafe.service.AddressService;
import com.example.mobilesafe.service.BlackNumberService;
import com.example.mobilesafe.service.WatchDogService;
import com.example.mobilesafe.utils.ServiceUtil;
import com.example.mobilesafe.utils.SharedPreferencesUtil;
import com.example.mobilesafe.view.SettingClickView;
import com.example.mobilesafe.view.SettingItemView;

public class SettingActivity extends AppCompatActivity {

    // 描述文字所在的字符串数组
    private String[] mToastStyleDes;

    // 条目的索引值
    private int mToaststyle;

    // 自定义组合控件SettingClickView
    private SettingClickView scv_toast_style;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_setting);

        // 初始化更新
        initUpdate();

        // 初始化显示电话号码归属地
        initAddress();

        // 初始化电话号码归属地的显示样式
        initToastStyle();

        // 初始化电话号码归属地的显示位置
        initLocation();

        // 初始化黑名单配置
        initBlackNumber();

        // 初始化程序锁
        initAppLock();
    }

    /**
     * 1.初始化"更新"条目的方法
     */
    private void initUpdate() {
        final SettingItemView siv_update = findViewById(R.id.siv_update);
        // 0.从sp中获取已有的开关状态，然后根据这一次存储的结果去做决定
        boolean open_update = SharedPreferencesUtil.getBoolean(this, ConstantValue.OPEN_UPDATE, false);
        siv_update.setCheck(open_update);
        siv_update.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 1.获取之前的选中状态
                boolean isCheck = siv_update.isCheck();
                // 2.取反选中状态
                siv_update.setCheck(!isCheck);
                // 3.将该状态存储到sp中
                SharedPreferencesUtil.putBoolean(getApplicationContext(),ConstantValue.OPEN_UPDATE,!isCheck);
            }
        });
    }


    /**
     * 2.初始化“显示电话号码归属地”的方法
     */
    private void initAddress() {
        final SettingItemView siv_address = findViewById(R.id.siv_address);
        // 通过ServiceUtil来判断服务是否开启
        boolean isRunning = ServiceUtil.isRunning(this, "com.example.mobilesafe.service.AddressService");
        siv_address.setCheck(isRunning);
        // 0.设置点击事件，切换状态（是否开启电话号码归属地）
        siv_address.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 1.获取之前的选中状态
                boolean isCheck = siv_address.isCheck();
                // 2.取反选中状态
                siv_address.setCheck(!isCheck);
                // 3.判断是否开启服务
                if (!isCheck){
                    // 开启服务
                    startService(new Intent(getApplicationContext(), AddressService.class));
                }else {
                    // 关闭服务
                    stopService(new Intent(getApplicationContext(), AddressService.class));
                }
            }
        });
    }

    /**
     * 3.初始化“显示号码归属地显示样式”的方法
     */
    private void initToastStyle(){
        scv_toast_style = findViewById(R.id.scv_toast_style);
        scv_toast_style.setTitle("电话归属地样式选择");
        // 1.创建描述文字所在的String类型数组
        mToastStyleDes = new String[]{"透明", "橙色", "蓝色", "灰色", "绿色"};
        // 2.通过Sp获取Toast显示样式的索引值(int)，用于描述文字
        mToaststyle = SharedPreferencesUtil.getInt(this, ConstantValue.TOAST_STYLE, 0);
        // 3.通过索引值获取字符串数组中的文字，显示给描述内容的控件上
        scv_toast_style.setDes(mToastStyleDes[mToaststyle]);
        // 4.监听点击事件，弹出对话框
        scv_toast_style.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 5.选择Toast样式的对话框
                showToastStyleDialog();
            }
        });
    }

    /**
     * 4.初始化“显示号码归属地显示位置”的方法
     */
    private void initLocation(){
        SettingClickView scv_location = findViewById(R.id.scv_location);
        scv_location.setTitle("归属地提示框的位置");
        scv_location.setDes("设置归属地提示框的位置");
        scv_location.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(getApplicationContext(),ToastLocationActivity.class));
            }
        });
    }

    /**
     * 5.初始化“黑名单是否开启”的方法
     */
    private void initBlackNumber() {
        final SettingItemView siv_blacknumber = findViewById(R.id.siv_blacknumber);
        boolean isRunning = ServiceUtil.isRunning(this, "com.example.mobilesafe.service.BlackNumberService");
        siv_blacknumber.setCheck(isRunning);
        siv_blacknumber.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                boolean isCheck = siv_blacknumber.isCheck();
                siv_blacknumber.setCheck(!isCheck);
                if (!isCheck){
                    // 开启服务
                    startService(new Intent(getApplicationContext(), BlackNumberService.class));
                }else {
                    // 关闭服务
                    stopService(new Intent(getApplicationContext(), BlackNumberService.class));
                }
            }
        });
    }

    /**
     * 创建选中显示样式的对话框
     */
    private void showToastStyleDialog() {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setIcon(R.drawable.ic_launcher); // 设置图标
        builder.setTitle("请选择归属地显示样式"); // 设置标题
        builder.setSingleChoiceItems(mToastStyleDes, mToaststyle, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                // 1.记录选中的索引值
                SharedPreferencesUtil.putInt(getApplicationContext(),ConstantValue.TOAST_STYLE,which);
                // 2.关闭对话框
                dialog.dismiss();
                // 3.显示选中色值文字
                scv_toast_style.setDes(mToastStyleDes[which]);
            }
        }); // 单个选择条目对应的事件监听（String类型的数组，选中条目索引值，监听器）
        // “取消”按钮的点击事件监听
        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        });
        builder.show(); // 展示对话框
    }

    /**
     * 6.初始化程序锁
     */
    private void initAppLock() {
        final SettingItemView siv_app_lock = findViewById(R.id.siv_app_lock);
        boolean isRunning = ServiceUtil.isRunning(this, "com.example.mobilesafe.service.WatchDogService");
        siv_app_lock.setCheck(isRunning);
        siv_app_lock.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                boolean isCheck = siv_app_lock.isCheck();
                siv_app_lock.setCheck(!isCheck);
                if (!isCheck){
                    // 开启服务
                    startService(new Intent(getApplicationContext(), WatchDogService.class));
                }else {
                    // 关闭服务
                    stopService(new Intent(getApplicationContext(), WatchDogService.class));
                }
            }
        });
    }
}